package com.gitee.xmhzzz.component.spring.cloud.component.dao.dto;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gitee.xmhzzz.component.common.dto.PageVO;

import java.util.List;
import java.util.stream.Collectors;

/**
  * @ClassName
  * @Description
  * @Author wzq
  * @Date 2023/12/15 16:50
  * @Version 1.0
  */
public class PageVOAdapter<T> extends PageVO<T> {

    /**
     * 分页对象转换
     *
     * @param page 分页对象
     * @return 分页对象
     */
    public static <T> PageVOAdapter<T> of(IPage<T> page) {
        PageVOAdapter<T> p = new PageVOAdapter<>();
        p.setCurrent(page.getCurrent());
        p.setSize(page.getSize());
        p.setTotal(page.getTotal());
        p.setPages(page.getPages());
        p.setRecords(page.getRecords());
        return p;
    }

    /**
     * 分页对象转换
     *
     * @param page        分页对象
     * @param targetClass 数据类型
     * @return 分页对象
     */
    public static <T, S> PageVOAdapter<T> of(IPage<S> page, Class<T> targetClass) {
        PageVOAdapter<T> p = new PageVOAdapter<>();
        p.setCurrent(page.getCurrent());
        p.setSize(page.getSize());
        p.setTotal(page.getTotal());
        p.setPages(page.getPages());
        p.setRecords(page.getRecords().stream().map(item -> BeanUtil.toBeanIgnoreError(item, targetClass)).collect(Collectors.toList()));
        return p;
    }

    /**
     * 分页对象转换
     *
     * @param page    分页对象
     * @param records 数据列表
     * @return 分页对象
     */
    public static <T, S> PageVOAdapter<T> of(IPage<S> page, List<T> records) {
        PageVOAdapter<T> p = new PageVOAdapter<>();
        p.setCurrent(page.getCurrent());
        p.setSize(page.getSize());
        p.setTotal(page.getTotal());
        p.setPages(page.getPages());
        p.setRecords(records);
        return p;
    }
}
